#ifndef _LOOP_QUEUE_H_
#define _LOOP_QUEUE_H_

// ======== 循环队列 ========
typedef struct LoopQueue {
    // malloc 分配在堆上
    int* elems;   // 存储         
    // size == 0 && head == tail => 队列为空
    int head;     // 头索引       
    // size != 0 && head == tail => 队列为满
    int tail;     // 尾索引       
    int size;     // 存储元素数量
    int cap;      // 存储空间大小 
} LoopQueue;

void LoopQueueNew(LoopQueue* q);
void LoopQueueEnqueue(LoopQueue* q, int elem);
int LoopQueueDequeue(LoopQueue* q);
int LoopQueueFront(LoopQueue* q);
int LoopQueueSize(LoopQueue* q);
int LoopQueueIsEmpty(LoopQueue* q);
void LoopQueueString(LoopQueue* q); 
void LoopQueueDispose(LoopQueue* q); 

#endif